﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 存钱取钱
{
    class Program
    {

        static void Main(string[] args)
        {

            Count user1 = new Count("老赵", 2000);
            /*编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户想要存放在银行账户中的余额，
            另一个值表示用户想要从银行账户中提取的金额。
            实现存取款功能，
            用户功能选择：1、存款，2、取款
            取款时：
            当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException
            参数超出范围的异常，异常信息可以写“取款金额大于余额，请重新输入”
            ，如此以确保取款金额始终不大于当前余额。
            操作结束，打印输出余额是多少。
            最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。*/

            while (true)
            {
                Console.WriteLine("1.存钱\t2.取钱\t其他键直接退出");
                string choose = Console.ReadLine();
                switch (choose)
                {
                    case "1":
                        SaveMoney(user1);

                        continue;
                    case "2":
                        Withdrawal(user1);

                        break;

                    default:

                        break;

                }
                Console.WriteLine("继续操作请按 “1”\t退出请按其他任意键 ");
                string continueOrEnd = Console.ReadLine();
                if (continueOrEnd.Equals("1"))
                {
                    Console.WriteLine("继续操作。。。。。");
                    continue;
                }
                else
                {
                    Console.WriteLine("退出程序，感谢使用，那好小票");
                    break;
                }


            }
            Console.WriteLine("正在打印小票，请稍等。。。。");
            Console.WriteLine(user1);


            Console.ReadKey();

        }
        /// <summary>
        /// 存钱
        /// </summary>
        /// <param name="user1"></param>
        static void SaveMoney(Count user1)
        {
            Console.WriteLine("情报钞票整理好放入ATM");
            decimal saveMoney = decimal.Parse(Console.ReadLine());
            user1.AllAmount += saveMoney;
            Console.WriteLine("存款成功，现余额为{0}", user1.AllAmount);
        }


        /// <summary>
        /// 取钱
        /// </summary>
        /// <param name="user"></param>
        static void Withdrawal(Count user)
        {

            while (true)
            {
                Console.WriteLine("请输入您要取款的金额");
                try
                {
                    decimal withdrawal = decimal.Parse(Console.ReadLine());
                    if (withdrawal >= user.AllAmount)
                    {
                        throw new ArgumentException();
                    }
                    else
                    {
                        Console.WriteLine("取款成功");
                        user.AllAmount -= withdrawal;
                        break;
                    }
                }
                catch (Exception)
                {
                    Console.WriteLine("取款金额大于余额，请重新输入");
                    continue;
                }
                
            }
            Console.WriteLine("操作完成，请问你是否还要继续操作吗？");
        }
    }
    class Count
    {
        private string _userName;
        private decimal _allAmount;

        public Count(string userName, decimal allAmount)
        {
            AllAmount = allAmount;
            UserName = userName;
        }

        public decimal AllAmount { get => _allAmount; set => _allAmount = value; }
        public string UserName { get => _userName; set => _userName = value; }
        public override string ToString()
        {
            return $"用户名{UserName}，户头存款{AllAmount}";
        }
    }
}
